package com.sjl.config.shiro;

import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author sjl
 * @version V1.0
 * @Package com.sjl.config.shiro
 * @Date 19-1-22 2019
 */
@Configuration
public class ShiroConfiguration {
    /**
     * ShiroFilterFactoryBean 处理拦截资源文件问题。
     * 注意：单独一个ShiroFilterFactoryBean配置是或报错的，以为在
     * 初始化ShiroFilterFactoryBean的时候需要注入：SecurityManager
     * <p>
     * Filter Chain定义说明 1、一个URL可以配置多个Filter，使用逗号分隔 2、当设置多个过滤器时，全部验证通过，才视为通过
     * 3、部分过滤器可指定参数，如perms，roles
     */
    @Bean
    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        // 必须设置 SecurityManager
         shiroFilterFactoryBean.setSecurityManager(securityManager);
        // 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面 shiroFilterFactoryBean.setLoginUrl("/login");
        // 登录成功后要跳转的链接 shiroFilterFactoryBean.setSuccessUrl("/index");
        // 未授权界面; shiroFilterFactoryBean.setUnauthorizedUrl("/403");
        // 自定义拦截器 Map<String, Filter> filtersMap = new LinkedHashMap<String, Filter>(); /
        // /限制同一帐号同时在线的个数。
        // filtersMap.put("kickout", kickoutSessionControlFilter()); shiroFilterFactoryBean.setFilters(filtersMap);
        // 权限控制map. Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
        // 配置不会被拦截的链接 顺序判断 // 配置退出过滤器,其中的具体的退出代码Shiro已经替我们实现了
        // 从数据库获取动态的权限
        // filterChainDefinitionMap.put("/add", "perms[权限添加]");
        // <!-- 过滤链定义，从上向下顺序执行，一般将 /**放在最为下边 -->:这是一个坑呢，一不小心代码就不好使了;
        // <!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
        // logout这个拦截器是shiro已经实现好了的。
        // 从数据库获取
         /*List<SysPermissionInit> list = sysPermissionInitService.selectAll();
            for (SysPermissionInit sysPermissionInit : list) {
                filterChainDefinitionMap.put(sysPermissionInit.getUrl(),
                        sysPermissionInit.getPermissionInit());
            }*/


        return shiroFilterFactoryBean;
    }

    public static void main(String[] args) {
        System.out.println("asd");

    }


}
